<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>PHP 7.4.x 废弃的功能</title>
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-base.css" />
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-medium.css" />

 </head>
 <body class="docs"><div class="navbar navbar-fixed-top">
  <div class="navbar-inner clearfix">
    <ul class="nav" style="width: 100%">
      <li style="float: left;"><a href="migration74.incompatible.html">« 不向后兼容的变更</a></li>
      <li style="float: right;"><a href="migration74.removed-extensions.html">移除的扩展 »</a></li>
    </ul>
  </div>
</div>
<div id="breadcrumbs" class="clearfix">
  <ul class="breadcrumbs-container">
    <li><a href="index.html">PHP Manual</a></li>
    <li><a href="migration74.html">从 PHP 7.3.x 移植到 PHP 7.4.x</a></li>
    <li>PHP 7.4.x 废弃的功能</li>
  </ul>
</div>
<div id="layout">
  <div id="layout-content"><div id="migration74.deprecated" class="sect1">
 <h2 class="title">PHP 7.4.x 废弃的功能</h2>

 <div class="sect2" id="migration74.deprecated.core">
  <h3 class="title">PHP 核心中废弃的功能</h3>

  <div class="sect3" id="migration74.deprecated.core.nested-ternary">
   <h4 class="title">没有显式括号的嵌套三元运算符</h4>

   <p class="para">
    嵌套的三元操作中，必须明确使用显式括号来决定操作的顺序。以前，如果不使用括号，在大多数情况下，左关联性不会导致预期的行为。
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />1&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">2&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">3&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">4&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">5</span><span style="color: #007700">;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;弃用<br /></span><span style="color: #007700">(</span><span style="color: #0000BB">1&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">2&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">)&nbsp;?&nbsp;</span><span style="color: #0000BB">4&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">5</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;ok<br /></span><span style="color: #0000BB">1&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">2&nbsp;</span><span style="color: #007700">:&nbsp;(</span><span style="color: #0000BB">3&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">4&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">5</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;ok<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

    </div>
   </p>
   <p class="para">
    当运算对象嵌套到中间时，<em class="emphasis">不</em>需要括号，因为没有歧义且不受关联顺序的影响：
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
1&nbsp;?&nbsp;2&nbsp;?&nbsp;3&nbsp;:&nbsp;4&nbsp;:&nbsp;5&nbsp;//&nbsp;ok</span>
</code></div>
     </div>

    </div>
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.array-string-access-curly-brace">
   <h4 class="title">大括号访问数组和字符串索引</h4>

   <p class="para">
    使用大括号访问数组及字符串索引的方式已被废弃。请使用
    <code class="literal">$var[$idx]</code> 的语法来替代
    <code class="literal">$var{$idx}</code>。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.real">
   <h4 class="title">(real) 类型和 <span class="function"><a href="function.is-real.html" class="function">is_real()</a></span> 函数</h4>

   <p class="para">
    <code class="literal">(real)</code> 类型已被废弃，请使用
    <code class="literal">(float)</code> 来替代。
   </p>
   <p class="para">
    同时被废弃的还有 <span class="function"><a href="function.is-real.html" class="function">is_real()</a></span>
    函数，请使用 <span class="function"><a href="function.is-float.html" class="function">is_float()</a></span> 来替代。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.unbind-this">
   <h4 class="title">Unbinding <code class="literal">$this</code> when <code class="literal">$this</code> is used</h4>

   <p class="para">
    Unbinding <code class="literal">$this</code> of a non-static closure
    that uses <code class="literal">$this</code> is deprecated.
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.parent">
   <h4 class="title"><code class="literal">parent</code> 关键词在没父类的类中使用</h4>

   <p class="para">
    在没有父类的类中使用 <code class="literal">parent</code>
    关键词已被废弃，并且在将来的 PHP 版本中将会抛出一个编译错误。目前只在运行时访问父类时才会产生错误。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.allow-url-include">
   <h4 class="title">allow_url_include INI 选项</h4>

   <p class="para">
    配置文件中的 <a href="filesystem.configuration.html#ini.allow-url-include" class="link">allow_url_include</a>
    选项被废弃。如果启用了该选项，将会产生一个弃用通知。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.invalid-base-characters">
   <h4 class="title">基础转换函数中的无效字符处理</h4>

   <p class="para">
    在下面这些基础转换函数中，<span class="function"><a href="function.base-convert.html" class="function">base_convert()</a></span>,
    <span class="function"><a href="function.bindec.html" class="function">bindec()</a></span>, <span class="function"><a href="function.octdec.html" class="function">octdec()</a></span> 和
    <span class="function"><a href="function.hexdec.html" class="function">hexdec()</a></span>
    如果传入了非法字符，将会抛出一个弃用通知。函数会忽略掉无效字符后正常返回结果。前导空格和尾部空格，以及类型为
    0x (取决于基数) 被允许传入。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.array-key-exists-objects">
   <h4 class="title">在对象中使用 <span class="function"><a href="function.array-key-exists.html" class="function">array_key_exists()</a></span></h4>

   <p class="para">
    在一个对象中使用 <span class="function"><a href="function.array-key-exists.html" class="function">array_key_exists()</a></span>
    已被废弃。请使用 <span class="function"><a href="function.isset.html" class="function">isset()</a></span> 或 <span class="function"><a href="function.property-exists.html" class="function">property_exists()</a></span>
    来替代。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.magic-quotes-functions">
   <h4 class="title">魔术引号函数</h4>

   <p class="para">
    魔术引号函数 <span class="function"><a href="function.get-magic-quotes-gpc.html" class="function">get_magic_quotes_gpc()</a></span> 和 <span class="function"><a href="function.get-magic-quotes-runtime.html" class="function">get_magic_quotes_runtime()</a></span>
    已被废弃。它们将永远返回 <strong><code>false</code></strong>。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.hebrevc">
   <h4 class="title"><span class="function"><a href="function.hebrevc.html" class="function">hebrevc()</a></span> 函数</h4>

   <p class="para">
    <span class="function"><a href="function.hebrevc.html" class="function">hebrevc()</a></span> 函数已被废弃。
    可以用 <code class="literal">nl2br(hebrev($str))</code> 来替代，更好的方法是启用 Unicode RTL 来支持。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.convert-cyr-string">
   <h4 class="title"><span class="function"><a href="function.convert-cyr-string.html" class="function">convert_cyr_string()</a></span> 函数</h4>

   <p class="para">
    <span class="function"><a href="function.convert-cyr-string.html" class="function">convert_cyr_string()</a></span> 函数已被废弃。可以用 <span class="function"><strong>mb_convert_string()</strong></span>，
    <span class="function"><a href="function.iconv.html" class="function">iconv()</a></span> 或 <span class="classname"><a href="class.uconverter.html" class="classname">UConverter</a></span> 替代。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.money-format">
   <h4 class="title"><span class="function"><a href="function.money-format.html" class="function">money_format()</a></span> 函数</h4>

   <p class="para">
    <span class="function"><a href="function.money-format.html" class="function">money_format()</a></span> 函数已被废弃。
    可以用更国际化的 <span class="classname"><a href="class.numberformatter.html" class="classname">NumberFormatter</a></span> 功能来替代。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.ezmlm-hash">
   <h4 class="title"><span class="function"><a href="function.ezmlm-hash.html" class="function">ezmlm_hash()</a></span> 函数</h4>

   <p class="para">
    <span class="function"><a href="function.ezmlm-hash.html" class="function">ezmlm_hash()</a></span> 函数已被废弃。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.restore-include-path">
   <h4 class="title"><span class="function"><a href="function.restore-include-path.html" class="function">restore_include_path()</a></span> 函数</h4>

   <p class="para">
    <span class="function"><a href="function.restore-include-path.html" class="function">restore_include_path()</a></span> 函数已被废弃。可以用 <code class="literal">ini_restore(&#039;include_path&#039;)</code> 替代。
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.implode-reverse-parameters">
   <h4 class="title">Implode 函数的参数顺序</h4>

   <p class="para">
    <span class="function"><a href="function.implode.html" class="function">implode()</a></span> 允许反转参数顺序的特性已被废弃，请使用 <code class="literal">implode($glue, $parts)</code>
    来替代 <code class="literal">implode($parts, $glue)</code>。
   </p>
  </div>

 </div>

 <div class="sect2" id="migration74.deprecated.com">
  <h3 class="title">COM</h3>

  <p class="para">
   导入类型库的大小写不敏感的常量注册已被废弃。
  </p>
 </div>

 <div class="sect2" id="migration74.deprecated.filter">
  <h3 class="title">Filter</h3>

  <p class="para">
   <strong><code>FILTER_SANITIZE_MAGIC_QUOTES</code></strong>
   已被废弃，使用 <strong><code>FILTER_SANITIZE_ADD_SLASHES</code></strong> 来替代。
  </p>
 </div>

 <div class="sect2" id="migration74.deprecated.mbstring">
  <h3 class="title">多字节字符串</h3>

  <p class="para">
   弃用向 <span class="function"><a href="function.mb-ereg-replace.html" class="function">mb_ereg_replace()</a></span> 传递非字符串 pattern。目前，非字符串
   pattern 被解释为 ASCII 码点。在 PHP 8 中，pattern 将被解释为字符串。
  </p>
  <p class="para">
   弃用传递 encoding 作为 <span class="function"><a href="function.mb-strrpos.html" class="function">mb_strrpos()</a></span> 的第三个参数。而是替换为第三个参数 offset
   默认传 0，且 encoding 作为第四个参数。
  </p>
 </div>

 <div class="sect2" id="migration74.deprecated.ldap">
  <h3 class="title">轻量目录访问协议</h3>

  <p class="para">
   <span class="function"><a href="function.ldap-control-paged-result-response.html" class="function">ldap_control_paged_result_response()</a></span> 和
   <span class="function"><a href="function.ldap-control-paged-result.html" class="function">ldap_control_paged_result()</a></span> 函数已被废弃。控制页面操作可以使用
   <span class="function"><a href="function.ldap-search.html" class="function">ldap_search()</a></span> 替代。
  </p>
 </div>

 <div class="sect2" id="migration74.deprecated.reflection">
  <h3 class="title">Reflection</h3>

  <p class="para">
   调用 <span class="methodname"><a href="reflectiontype.tostring.html" class="methodname">ReflectionType::__toString()</a></span> 现在将会抛出一个弃用通知。
   该方法从 PHP 7.1 开始，在
   <span class="methodname"><a href="reflectionnamedtype.getname.html" class="methodname">ReflectionNamedType::getName()</a></span>
   的文档中已经被声明废弃，但是由于技术原因，并没有抛出弃用通知。
  </p>
  <p class="para">
   弃用所有 <span class="classname"><a href="class.reflection.html" class="classname">Reflection</a></span> 类的 <code class="literal">export()</code> 方法。而是替换为构造
   <span class="classname"><a href="class.reflection.html" class="classname">Reflection</a></span> 对象并转换为字符串：
   <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;ReflectionClass::export(Foo::class,&nbsp;false)&nbsp;是：<br /></span><span style="color: #007700">echo&nbsp;new&nbsp;</span><span style="color: #0000BB">ReflectionClass</span><span style="color: #007700">(</span><span style="color: #0000BB">Foo</span><span style="color: #007700">::class),&nbsp;</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;$str&nbsp;=&nbsp;ReflectionClass::export(Foo::class,&nbsp;true)&nbsp;是：<br /></span><span style="color: #0000BB">$str&nbsp;</span><span style="color: #007700">=&nbsp;(string)&nbsp;new&nbsp;</span><span style="color: #0000BB">ReflectionClass</span><span style="color: #007700">(</span><span style="color: #0000BB">Foo</span><span style="color: #007700">::class);<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

    </div>
  </p>
 </div>

 <div class="sect2" id="migration74.deprecated.socket">
  <h3 class="title">Socket</h3>

  <p class="para">
   常量 <strong><code>AI_IDN_ALLOW_UNASSIGNED</code></strong> 和
   <strong><code>AI_IDN_USE_STD3_ASCII_RULES</code></strong> 在
   <span class="function"><a href="function.socket-addrinfo-lookup.html" class="function">socket_addrinfo_lookup()</a></span> 中不再可用，因为该常量在 glibc 中已被废弃。
  </p>
 </div>

</div></div></div></body></html>